package cn.itsource.system.service.impl;

import cn.itsource.system.service.ILogService;
import cn.itsource.system.domain.Log;
import cn.itsource.system.mapper.LogMapper;
import cn.itsource.system.query.LogQuery;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
// Transactional：用来控制事务的注解；readOnly：只读；propagation：事务传播机制
//  Propagation.SUPPORTS：支持当前事务，如果没有当前事务，就以非事务方法执行
@Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
public class LogServiceImpl implements ILogService {

    @Autowired
    private LogMapper logMapper;

    @Transactional
    @Override
    public void add(Log log) {

        // hutool生成的盐值和加密
        // RandomUtil.randomString 获得一个随机的字符串（只包含数字和字符） ，32位
//        String salt = RandomUtil.randomString(32);
//        //  SecureUtil.md5 加密
//        String md5Psd = SecureUtil.md5(log.getPassword() + salt);
//
//        log.setSalt(salt);
//        log.setPassword(md5Psd);
        logMapper.add(log);
    }

    @Transactional
    @Override
    public void update(Log log) {
        logMapper.update(log);
    }

    @Transactional
    @Override
    public void delete(Long id) {
        logMapper.delete(id);
    }

    @Override
    public Log getOne(Long id) {
        return logMapper.getOne(id);
    }

    @Override
    public List<Log> getAll() {
        return logMapper.getAll();
    }

    @Transactional
    @Override
    public void patchDelete(Long[] ids) {
        logMapper.patchDelete(ids);
    }

    @Override
    public PageInfo<Log> pageQuery(LogQuery query) {
        //原生的写法：1.先查询总页数  2.再根据分页的信息查询当前页的数据
        //PageHelper的写法：开启分页
//                PageHelper.startPage(当前页,每页显示的条数);
        PageHelper.startPage(query.getCurrentPage(), query.getPageSize());
        //分页查询：只要开启了分页，它会帮助我们做什么事情？
        //1.先查询总数量  //2.根据application.yml中驱动名自动实现分页，如果是mysql就用limit
        //3.自动计算limit的第一个值：limit a,b [a = 当前页的起始下标 = (当前页-1)*每页显示的条数]
//        List<Emp> emps = empMapper.pageQuery(empQuery);
        List<Log> list = logMapper.pageQuery(query);
        return new PageInfo(list);
    }
}
